/**
 * 常量定义模块
 *
 * 包含游戏中所有的枚举类型、配置数据和工具函数
 */

// 常量定义
const ROUND_LIMIT = 200;            // 回合数上限
const COMMAND_FAIL_LIMIT = 50;     // 命令失败次数上限
const INIT_RMB = 200;              // 玩家初始经济
const SPLASH_DAMAGE_RATIO = 0.5;  // 溅射伤害比例

// 枚举定义
const UnitType = {
    soldier: 0,    // 士兵
    collect: 1,    // 采集兵
    doctor: 2,     // 治疗兵
    archer: 3,     // 弓箭手
    worker: 4      // 建造兵
};

const TildeType = {
    flat: 0,     // 平地
    hill: 1,     // 山丘
    river: 2,    // 河流
    gold: 11,    // 黄金矿
    energy: 12,  // 能源矿
    wood: 13,    // 木材
    stone: 14    // 石材
};

const BuildingType = {
    base: 0,   // 基地
    tower: 1,  // 防御塔
    wall: 2    // 城墙
};

const EntityType = {
    unit: 0,     // 单位
    building: 1, // 建筑
    terrain: 2   // 地形
};

const DirectionType = {
    up: [0, -1],     // 向上
    down: [0, 1],    // 向下
    left: [-1, 0],   // 向左
    right: [1, 0]    // 向右
};

const CommandType = {
    init: "init",       // 初始化战场
    end: "end",         // 结束
    move: "move",       // 移动
    attack: "attack",   // 攻击
    build: "build",     // 建造
    swap: "swap",       // 生产
    heal: "heal",       // 治疗
    collect: "collect"  // 采集
};

const PlayerType = {
    PLAYER1: "player1",  // 玩家1
    PLAYER2: "player2",  // 玩家2
    ADMIN: "admin"       // 管理员
};

// 单位配置
const UNIT_CONFIG = {
    [UnitType.soldier]: {
        name: "士兵",           // 名字
        attack: 30,           // 攻击力
        speed: 1,           // 移动速度
        hp: 80,           // 初始血量
        attackRange: 1,           // 攻击范围
        cost: 25,           // 生产成本
        killedAward: 15,           // 被击杀奖励
        icon: "⚔️",           // 文本小图标
    },
    [UnitType.collect]: {
        name: "采集兵",           // 名字
        attack: 1,           // 采集数量
        speed: 1,           // 移动速度
        hp: 40,           // 初始血量
        attackRange: 1,           // 采集范围
        cost: 15,           // 生产成本
        killedAward: 15,           // 被击杀奖励
        icon: "⛏️",           // 文本小图标
    },
    [UnitType.doctor]: {
        name: "治疗兵",           // 名字
        attack: 10,           // 治疗量
        speed: 1,           // 移动速度
        hp: 50,           // 初始血量
        attackRange: 1,           // 治疗范围
        cost: 20,           // 生产成本
        killedAward: 12,           // 被击杀奖励
        icon: "💊",           // 文本小图标
    },
    [UnitType.archer]: {
        name: "弓箭手",           // 名字
        attack: 20,           // 攻击力
        speed: 1,           // 移动速度
        hp: 40,           // 初始血量
        attackRange: 3,           // 攻击范围
        cost: 30,           // 生产成本
        killedAward: 18,           // 被击杀奖励
        icon: "🏹",           // 文本小图标
    },
    [UnitType.worker]: {
        name: "建造兵",           // 名字
        attack: 1,           // 建筑数量
        speed: 1,           // 移动速度
        hp: 50,           // 初始血量
        attackRange: 1,           // 建造范围
        cost: 30,           // 生产成本
        killedAward: 18,           // 被击杀奖励
        icon: "🪓",           // 文本小图标
    },
};

// 资源配置
const RESOURCE_CONFIG = {
    [TildeType.energy]: {
        name: "能源",           // 名字
        value: 3,           // 价值
        icon: "⚡",           // 文本小图标
    },
    [TildeType.wood]: {
        name: "木材",           // 名字
        value: 2,           // 价值
        icon: "🌲",           // 文本小图标
    },
    [TildeType.stone]: {
        name: "石材",           // 名字
        value: 2,           // 价值
        icon: "🧱",           // 文本小图标
    },
    [TildeType.gold]: {
        name: "黄金",           // 名字
        value: 6,           // 价值
        icon: "💰",           // 文本小图标
    },
};

// 建筑配置
const BUILDING_CONFIG = {
    [BuildingType.base]: {
        name: "基地",           // 名字
        attack: 1,           // 攻击力
        hp: 600,           // 初始血量
        attackRange: 10,           // 攻击范围
        cost: 0,           // 建造成本
        killedAward: 0,           // 被击杀奖励
        icon: "🕍",           // 文本小图标
    },
    [BuildingType.tower]: {
        name: "防御塔",           // 名字
        attack: 30,           // 攻击力
        hp: 50,           // 初始血量
        attackRange: 4,           // 攻击范围
        cost: 100,           // 建造成本
        killedAward: 100,           // 被击杀奖励
        icon: "🗼",           // 文本小图标
    },
    [BuildingType.wall]: {
        name: "城墙",           // 名字
        attack: 0,           // 攻击力
        hp: 150,           // 初始血量
        attackRange: 0,           // 攻击范围
        cost: 200000,           // 建造成本
        killedAward: 6,           // 被击杀奖励
        icon: "🌆",           // 文本小图标
    },
};

// 工具函数
function getUnitConfig(unitType) {
    return UNIT_CONFIG[unitType];
}

function getBuildingConfig(buildingType) {
    return BUILDING_CONFIG[buildingType];
}

function getResourceConfig(resourceType) {
    return RESOURCE_CONFIG[resourceType];
}

function isResourceTildeType(tildeType) {
    return (
        tildeType === TildeType.gold ||
        tildeType === TildeType.energy ||
        tildeType === TildeType.wood ||
        tildeType === TildeType.stone
    );
}

module.exports = {
    // 常量
    ROUND_LIMIT,
    COMMAND_FAIL_LIMIT,
    INIT_RMB,
    SPLASH_DAMAGE_RATIO,

    // 枚举
    UnitType,
    TildeType,
    BuildingType,
    EntityType,
    DirectionType,
    CommandType,
    PlayerType,

    // 配置
    UNIT_CONFIG,
    RESOURCE_CONFIG,
    BUILDING_CONFIG,

    // 工具函数
    getUnitConfig,
    getBuildingConfig,
    getResourceConfig,
    isResourceTildeType
};